mkdir scripts -ea 0 > $null
$code = @'
// set-odbc-secret-interactive.js
const keytar = require('keytar');
const readline = require('readline');
const SERVICE = 'LogiToky/RestaurantDB';
function ask(rl, q, {silent=false}={}) {
  return new Promise((res)=>{
    if(!silent){ rl.question(q, ans=>res(ans)); return; }
    const orig = rl._writeToOutput; rl._writeToOutput = ()=>{};
    rl.question(q, ans=>{ rl._writeToOutput = orig; rl.output.write("\n"); res(ans); });
  });
}
(async ()=>{
  const rl = readline.createInterface({input:process.stdin, output:process.stdout});
  try{
    const dsnDefault = process.env.DB_DSN || 'RestaurantDB';
    const dsn = (await ask(rl, `DSN [${dsnDefault}]: `) || '').trim() || dsnDefault;
    const pwd = await ask(rl, 'Mot de passe ODBC (saisie cachée): ', {silent:true});
    if(!pwd) throw new Error('Mot de passe vide, opération annulée.');
    await keytar.setPassword(SERVICE, dsn, pwd);
    console.log(`✅ Secret enregistré pour service="${SERVICE}" | compte(DSN)="${dsn}".`);
    const test = await keytar.getPassword(SERVICE, dsn);
    console.log(test ? '🔐 Vérification: lecture OK.' : '⚠️ Vérification: impossible de relire le secret.');
  }catch(e){ console.error('❌ Échec:', e.message||e); process.exitCode=1; }
  finally{ rl.close(); }
})();
'@
$code | Set-Content -Encoding utf8 -NoNewline .\scripts\set-odbc-secret-interactive.js
